package Hot100;

import common.ListNode;

/**
 * @author zhangmin
 * @create 2021-12-20 11:01
 */
public class add2 {

    /**
     * 2. 两数相加
     * 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。请你将两个数相加，并以相同形式返回一个表示和的链表。
     * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
     * 递归：按顺序加和，加和结果由和和进位组成
     * */
    //将l1和l2相加，pre是前一位的进位
    ListNode add(ListNode l1, ListNode l2, int pre){
        if (l1==null&&l2==null&&pre==0) return null;
        int num1=0,num2=0;
        ListNode next1=null,next2=null;
        if (l1!=null) {
            num1=l1.val;
            next1=l1.next;
        }
        if (l2!=null) {
            num2=l2.val;
            next2=l2.next;
        }
        int sum=num1+num2+pre;
        int cur=sum%10;
        pre=sum/10;
        ListNode root=new ListNode(cur);
        root.next=add(next1,next2,pre);
        return root;
    }
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        return add(l1,l2,0);
    }

}
